package javaCode.chapter14.customgeneric;

import java.util.ArrayList;

/**
 * @author 徐州城
 * @version 1.0
 * 泛型方法的使用
 */
public class CustomMethodGeneric {
    public static void main(String[] args) {

        Car car = new Car();
        car.fly("奥迪", 1000);//当调用方法时，传入参数，编译器，就会确定类型

        //测试
        //T->String R->ArrayList<String>
        Fish<String, ArrayList<String>> fish = new Fish<>();
        fish.hello(new ArrayList<String>(), "");
    }
}

/*
1. 泛型方法，可以定义在普通类中，也可以定义在泛型类中
2. 当泛型方法别调用时，类型会确定
*/
class Car {//普通类
    public void run() {//普通方法

    }

    //说明 泛型方法
    //1. <T, R> 就是泛型
    //2. 是提供给 fly使用的
    public <T, R> void fly(T t, R r) {//泛型方法
        System.out.println(t.getClass());
        System.out.println(r.getClass());
    }
}

class Fish<T, R> {//泛型类
    public void run() {//普通方法

    }

    public <U, M> void eat(U u, M m) {//泛型方法

    }

    //说明
    //1. 下面hi方法不是泛型方法
    //2. 是hi方法使用类声明的 泛型
    public void hi(T t) {

    }

    //泛型方法，可以使用类声明的泛型，也可以使用自己声明的泛型
    public <K> void hello(R r, K k) {
        System.out.println(r.getClass());
        System.out.println(k.getClass());
    }
}
